package com.lt.flashcard.bind;

import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.validator.AbstractValidator;

import com.lt.flashcard.Utility;
import com.lt.flashcard.model.service.Repository;
import com.lt.flashcard.model.service.UserService;

public class UniqueAccountValidator extends AbstractValidator {

	public void validate(ValidationContext ctx) {
		String acc = (String) ctx.getProperty().getValue();
		if(Utility.isEmptyString(acc)) {
			addInvalidMessage(ctx, "Phải nhập tên");
			return;
		}
		if(acc.length() < 4){
			addInvalidMessage(ctx, "Phải có ít nhất 4 ký tự");
			return;
		}
		else if(acc.matches("^\\d+$")){
			addInvalidMessage(ctx, "Không được chỉ có số");
			return;
		}
		else if(!acc.matches("\\S+")){
			addInvalidMessage(ctx, "Không được có khoảng trắng");
			return;
		}
		else if(!acc.matches("^\\w+$")){
			addInvalidMessage(ctx, "Chỉ có chữ cái, số và  _");
			return;
		}
		if(!acc.matches("^[\\w]{4,}$") || acc.matches("^[\\d\\.-_]{4,}$")) {
			addInvalidMessage(ctx, "Tên không hợp lệ");
			return;
		}
		UserService srv = Repository.getInstance().getUserService();
		if(srv.isAccountExist(acc)) {
			addInvalidMessage(ctx, "Tên đã được sử dụng");
			return;
		}
	}

}
